# import AIAssistant
MAX = 10  # 最大容量
class AIAssistant:
    def __init__(self, id: int, name: str, kind: str,version: float, online: bool, grade: float):
        self.id = id
        self.name = name
        self.kind = kind
        self.version = version
        self.online = online
        self.grade = grade

    # 统一打印格式，方便多处调用
    # def info(self) -> str:#返回字符串
    #     return (f"ID: {self.id}, 名称: {self.name}, 类型: {self.kind}, "
    #             f"版本: {self.version}, 状态: {self.online}, 能力评分: {self.grade}")


# -------------------- 各具体子类 --------------------
class VoiceAssistant(AIAssistant):
    def __init__(self, id: int, name: str, kind: str,
                 version: float, online: bool, grade: float):
        super().__init__(id, name, kind, version, online, grade)


class TextGenAssistant(AIAssistant):
    def __init__(self, id: int, name: str, kind: str,
                 version: float, online: bool, grade: float):
        super().__init__(id, name, kind, version, online, grade)


class ImageGenAssistant(AIAssistant):
    def __init__(self, id: int, name: str, kind: str,
                 version: float, online: bool, grade: float):
        super().__init__(id, name, kind, version, online, grade)


class DataAnalysisAssistant(AIAssistant):
    def __init__(self,id: int, name: str, kind: str,
                 version: float, online: bool, grade: float):
        super().__init__(id, name, kind, version, online, grade)


class TranslateAssistant(AIAssistant):
    def __init__(self, id: int, name: str, kind: str,
                 version: float, online: bool, grade: float):
        super().__init__(id, name, kind, version, online, grade)


# -------------------- 管理器 --------------------
class AIManagerNew:
    def __init__(self):#定义对象列表（Java里的数组）
        self.ai_list: list[AIAssistant] = []#：这个列表只存 AIAssistant 或其子类的实例
        self._init_data()

    # 预置 5 条数据
    def _init_data(self):#往当前对象的 ai_list 列表里，一次性塞 5 个默认的 AI 助手实例。
        self.ai_list.append(VoiceAssistant(101, "小智", "语音助手", 1.2, True, 85))
        self.ai_list.append(TextGenAssistant(102, "文小助", "文本助手", 2.0, True, 92))
        self.ai_list.append(ImageGenAssistant(103, "图灵", "图像助手", 1.5, True, 88))
        self.ai_list.append(DataAnalysisAssistant(104, "数小析", "数据分析助手", 1.5, True, 79))
        self.ai_list.append(TranslateAssistant(105, "翻译精灵", "翻译助手", 2.1, False, 95))

    # ---------------- 菜单 ----------------
    def menu(self):
        while True:
            print("========== AI助手管理器 =================")
            print("========1. 查看所有AI助手列表=======")
            print("========2. 根据ID查询助手详情=======")
            print("========3. 添加新的AI助手==========")
            print("========4. 根据ID修改助手信息=======")
            print("========5. 删除AI助手（按ID）=======")
            print("========6. 启动AI助手服务===========")
            print("========7. 停止AI助手服务===========")
            print("========8. 为AI助手分配任务=========")
            print("========9. 显示系统统计信息==========")
            print("========0. 退出系统================")
            print("===================================")
            # try:#try:   except Error:
            choose = eval(input("请输入你的选择：").strip())
            # except ValueError:
            #     print("输入错误，重试！")
            #     continue
            match choose:
                case 1:
                    self.find_all()
                case 2:
                    self.find_by_id()
                case 3:
                    self.add_assistant()
                case 4:
                    self.change_assistant()
                case 5:
                    self.delete_by_id()
                case 6:
                    self.start_ai()
                case 7:
                    self.stop_ai()
                case 8:
                    self.re_deliver()
                case 9:
                    self.show_all_ai()
                case 0:
                    print("谢谢使用！")
                    return#return 直接结束当前函数----退出菜单循环
                case _:#通配符相当于 Java 的 default
                    print("输入错误，重试！")

    # ---------------- 功能实现 ----------------

    #查看所有的AI
    def find_all(self):
        if not self.ai_list:
            print("当前列表为空！")
            return
        for assistant in self.ai_list:
            print(f"ID: {assistant.id}, 名称: {assistant.name}, 类型: {assistant.kind}, "
                f"版本: {assistant.version}, 状态: {assistant.online}, 能力评分: {assistant.grade}")

#通过id查找AI
    def find_by_id(self):
        try:
            id = int(input("请输入要查询的ID：").strip())
        except ValueError:
            print("❌ID必须是整数！")
            return
        for ast in self.ai_list:
            if ast.id == id:
                print(f"ID: {ast.id}, 名称: {ast.name}, 类型: {ast.kind}, 版本: {ast.version}, 状态: {ast.online}, 能力评分: {ast.grade}")
                return
        print("❌未找到该ID！")

#添加AI助手
    def add_assistant(self):
        if len(self.ai_list) >= MAX:
            print("列表已满，无法继续添加！")
            return
        # try:
        id = int(input("输入ID：").strip())#用来去掉字符串两端（开头和结尾）的空白字符
        name = input("输入名称：").strip()
        kind = input("输入类型：").strip()
        version = float(input("输入版本号：").strip())
        online = input("是否在线(true/false)：").strip().lower() == 'true'#与用户习惯小写输入判断真值
        grade = float(input("输入能力评分(0-100)：").strip())
        # except ValueError:
        #     print("❌输入格式错误！")
        #     return
        new_ast = AIAssistant(id, name, kind, version, online, grade)
        self.ai_list.append(new_ast)#列表添加新的元素（对象）
        print(f"✅ 助手【{name}】添加成功！")

#修改AI助手
    def change_assistant(self):
        id = int(input("请输入要修改的ID：").strip())
        ast = None#初始化
        for a in self.ai_list:
            if a.id == id:
                ast = a#如果找得到，则完成赋值
                break
        if ast is None:#找不到返回初始值
            print("❌未找到该ID！")
            return#跳出函数
        print("可修改属性列表为：name type version online score")
        kv = input("请输入要修改的属性和值，用【英】空格分割:").strip().split()
        # print(type(kv))
        if len(kv) != 2:#列表长度//split()结果为列表list
            print("❌输入格式错误！")
            return
        key, val = kv[0], kv[1]#属性和属性值
        match key:
            case "name":
                 ast.name = val
            case "type":
                ast.kind = val
            case "version":
                ast.version = float(val)#强制类型转换
            case "online":
                ast.online = val.lower() == 'true'#直接判断真值，如果用户输入true则ast.online布尔值为True
            case "score":
                ast.grade = float(val)
            case _:
                print("❌属性名无效！")
                return#跳出函数
        print("✅修改成功！")

#根据ID删除AI
    def delete_by_id(self):
        try:
            id = int(input("请输入要删除的ID：").strip())
        except ValueError:
            print("❌ID必须是整数！")
            return
        for index, ast in enumerate(self.ai_list):#遍历列表的元素和索引（位置）enumerate(self.ai_list)	每迭代一次返回一个二元组 (索引, 元素)
            if ast.id == id:
                del self.ai_list[index]#列表有del方法直接删除列表元素（对象）
                print("✅ 删除成功！")
                return
        print("❌未找到该ID！")#如果没找到

#启动AI服务
    def start_ai(self):
        try:
            id = int(input("请输入要启动的ID：").strip())
        except ValueError:
            print("❌ID必须是整数！")
            return
        ast = None
        for a in self.ai_list:#遍历列表中的元素
            if a.id == id:
                ast = a
                break
        if ast is None:
            print("❌未找到该ID！")
            return
        if ast.online:
            print("助手已处于运行状态！")
        else:
            ast.online = True
            print(f"助手【{ast.name}】已启动！")

#停止AI服务
    def stop_ai(self):
        id = int(input("请输入要停止的ID：").strip())
        ast = None
        for a in self.ai_list:
            if a.id == id:
                ast = a
                break
        if ast is None:
            print("❌未找到该ID！")
            return
        if not ast.online:
            print("助手已处于停止状态！")
        else:
            ast.online = False
            print(f"❌助手【{ast.name}】已停止！")

#执行任务
    def re_deliver(self):
        id = int(input("请输入要分配任务的ID：").strip())
        ast = None
        for a in self.ai_list:
            if a.id == id:
                ast = a
                break
        if ast is None:
            print("❌未找到该ID！")
            return
        if not ast.online:#如果不在线
            print("❌ 助手离线，无法执行任务！")
            return
        task = input("请输入任务内容：").strip()#strip() 就是“剃头剃尾”，把字符串两端不要的空白（或指定字符）全砍掉
        print(f"助手【{ast.name}】正在执行任务：{task}")

# 显示系统统计信息
    def show_all_ai(self):
        if self.ai_list==None:#如果列表中没有数据元素
            print("暂无数据！")
            return
        sum_online = sum(i.online for i in self.ai_list)#i得到遍历列表中的元素，然而i.online得到bool值1/0，则sum_online得到在线总数
        total = len(self.ai_list)#得到列表的长度
        average = sum(a.grade for a in self.ai_list) / total#对列表中的对象的属性分数求和
        print(f"总助手数：{total}")
        print(f"在线数：{ sum_online}")
        print(f"离线数：{total -  sum_online}")
        print(f"平均评分：{ average:.2f}")#average保留两位小数average:.2f


# -------------------- 主入口 --------------------
if __name__ == "__main__":
    AIManagerNew().menu()